/*
 * HasPtr.h
 *
 *  Created on: 2020年11月30日
 *      Author: san
 */

#ifndef HASPTR_H_
#define HASPTR_H_

#include <string>
#include <iostream>

class HasPtr {
public:
	// swap函数
	friend void swap(HasPtr &, HasPtr &);
	friend void printPtr(const HasPtr&);

	HasPtr(const std::string &s = std::string()): ps(new std::string(s)),i(0) {} ;
	HasPtr(const HasPtr &);
	HasPtr &operator=(HasPtr);
	virtual ~HasPtr();

private:
	std::string *ps;
	int i;
};

inline void swap(HasPtr &lhs, HasPtr &rhs)
{
	std::cout << "swap(HasPtr &lhs, HasPtr &rhs)" << std::endl;
	using std::swap;

	// 这里真是奇怪，看都看不懂
	swap(lhs.ps, rhs.ps);  // 交换指针，而不是string数据
	swap(lhs.i, rhs.i);  /// 交换int成员
}

inline void printPtr(const HasPtr &rhs)
{
	std::cout << *rhs.ps << std::endl;
}


#endif /* HASPTR_H_ */
